﻿using System.Runtime.CompilerServices;

namespace HanNuoTower
{
    /// <summary>
    /// HanoiTower Game
    /// </summary>
    /// <param name="number"></param>
    /// <param name="A"></param>
    /// <param name="B"></param>
    /// <param name="C"></param>
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入圆盘的个数：");
            string n = Console.ReadLine();
            int number = Convert.ToInt32(n);
            Console.Write("圆盘的移动方法");
            //开始时，A是开始位置，B是辅助位置，C是目标位置
            move(number, 'A', 'B', 'C');
            Console.ReadKey();
        }
        public static void move(int number, char x, char y, char z)
        {
            //当递归到一个圆盘放到辅助位置B
            if (number == 1)
                Console.WriteLine($"{number}:{x}--->{z}");
            else 
            {
                //将n-1层圆盘放到辅助位置B
                //对于第n-1个圆盘，把B当作目标位置，C当作辅助位置，所以BC互换
                move(number-1, x, z, y);
                //将第n个圆盘放在目标位置C上
                Console.WriteLine($"{number}:{x}--->{z}");
                //将第n-1层圆盘放到目标位置C
                //对于n-2层圆盘，A当作辅助位置，B当作开始位置，所以AB互换
                move(number-1, y, x, z);
            }
        }

    }
}